# -*- coding:utf-8 -*-
"""
@Author : 审心
@Time : 2023/4/8 16:48
"""


def is_empty(value: [str, list, set, tuple]) -> bool:
    """
    判断对象内容是否为空
    :param value: 值
    :return:
    """
    if value is None:
        return True
    elif isinstance(value, list) or isinstance(value, set) or isinstance(value, tuple):
        return len(value) == 0
    elif isinstance(value, str):
        return len(value.strip()) == 0
    else:
        raise TypeError("Unsupported type")


def is_not_empty(value: [str, list, set, tuple]) -> bool:
    """
    判断对象不为空
    :param value: 值
    :return
    """
    return not is_empty(value)


def has_none(*values):
    """
    判断多个值中是否有一个为 None

    :param values: 一个或多个要检查的值。可以传递任意数量的参数。
    :type values: 任意类型

    :return: 如果其中至少一个值为 None，则返回 True；否则返回 False。
    :rtype: bool
    """
    return any(val is None for val in values)


def not_has_none(*values):
    """
    判断多个值没有一个值为 None

    :param values: 一个或多个要检查的值。可以传递任意数量的参数。
    :type values: 任意类型

    :return: 如果其中至少一个值为 None，则返回 True；否则返回 False。
    :rtype: bool
    """
    return all(val is not None for val in values)


def all_values_empty(*args):
    """
    检查传入的所有参数是否都为空值。
    Args:
        *args: 可变参数，用于接受任意数量的参数。

    Returns:
        如果所有参数都为空值，返回 True，否则返回 False。
    """
    for arg in args:
        if arg:
            return False
    return True


def to_dict(obj):
    """
    将对象转换为字典

    Args:
        obj: 要转换的对象

    Returns:
        字典，包含对象的所有属性名和属性值
    """
    return vars(obj)


def from_dict(d, obj_type):
    """
    将字典转换为对象

    Args:
        d: 要转换的字典，包含对象的所有属性名和属性值
        obj_type: 要创建的对象类型

    Returns:
        创建的对象，包含字典中的所有属性名和属性值
    """
    obj = obj_type.__new__(obj_type)
    for key, value in d.items():
        setattr(obj, key, value)
    return obj
